#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
DOCX导出模块
"""

from docx import Document
from docx.shared import Inches, Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
import os
import sys
# 导入布局保持模块
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../')
from layout_preserver import LayoutPreserver

class DOCXExporter:
    def __init__(self):
        # 初始化布局保持器
        self.layout_preserver = LayoutPreserver()
    
    def export_text_to_docx(self, file_path, text):
        """
        将文本导出为DOCX文件
        
        Args:
            file_path (str): 输出DOCX文件路径
            text (str): 要导出的文本内容
        """
        # 创建Document对象
        doc = Document()
        
        # 添加标题
        doc.add_heading('OCR识别结果', 0)
        
        # 添加段落
        paragraph = doc.add_paragraph()
        
        # 按行添加文本内容
        lines = text.split('\n')
        for i, line in enumerate(lines):
            if i == 0:
                paragraph.add_run(line)
            else:
                # 添加新段落
                doc.add_paragraph(line)
        
        # 保存文档
        doc.save(file_path)
    
    def export_layout_preserved_docx(self, file_path, all_page_results):
        """
        将多页OCR结果按原样排版导出为DOCX文件
        
        Args:
            file_path (str): 输出DOCX文件路径
            all_page_results (dict): 所有页面的OCR结果，key为页面路径，value为结果列表
        """
        # 创建Document对象
        doc = Document()
        
        # 添加标题
        doc.add_heading('OCR识别结果（原样排版）', 0)
        
        # 按页面处理
        for i, (page_path, page_results) in enumerate(all_page_results.items()):
            # 添加页面标题
            doc.add_heading(f'页面 {i+1}', 1)
            
            # 使用布局保持器处理单页
            page_content = self.layout_preserver.preserve_layout_from_page_results(page_results, i+1, "text")
            
            # 添加页面内容
            # 按行分割内容并添加段落
            lines = page_content.split('\n')
            if lines:
                # 第一行添加到现有段落
                paragraph = doc.add_paragraph()
                paragraph.add_run(lines[0])
                
                # 其余行添加为新段落
                for line in lines[1:]:
                    doc.add_paragraph(line)
            else:
                doc.add_paragraph(page_content)
        
        # 保存文档
        doc.save(file_path)